Vuetify is a popular UI framework for Vue apps.
In this article, we’ll look at how to work with the Vuetify framework.
Mandatory List Item
We can add the mandatory prop to make choosing an item mandatory:
<template>
<v-container class="grey lighten-5">
<v-row>
<v-col>
<v-list flat>
<v-list-item-group v-model="model" color="indigo" active-class="border">
<v-list-item v-for="(item, i) in items" :key="i">
<v-list-item-icon>
<v-icon v-text="item.icon"></v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title v-text="item.text"></v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list-item-group>
</v-list>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
items: [
{
icon: "mdi-wifi",
text: "Wifi",
},
{
icon: "mdi-bluetooth",
text: "Bluetooth",
},
{
icon: "mdi-chart-donut",
text: "Data Usage",
},
],
model: undefined
}),
};
</script>
Custom Active Class
The active-class prop can be set to set a custom class for an active item.
For example, we can write:
<template>
<v-container class="grey lighten-5">
<v-row>
<v-col>
<v-list flat>
<v-list-item-group v-model="model" color="indigo" active-class="border">
<v-list-item v-for="(item, i) in items" :key="i">
<v-list-item-icon>
<v-icon v-text="item.icon"></v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title v-text="item.text"></v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list-item-group>
</v-list>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
items: [
{
icon: "mdi-wifi",
text: "Wifi",
},
{
icon: "mdi-bluetooth",
text: "Bluetooth",
},
{
icon: "mdi-chart-donut",
text: "Data Usage",
},
],
model: undefined
}),
};
</script>
<style scoped>
.border {
border: 1px solid red;
}
</style>
We just added the border class to see a red outline.
Slide Groups
The v-slide-group component is used to display paginated information.
For instance, we can write:
<template>
<v-container class="grey lighten-5">
<v-row>
<v-col>
<v-sheet class="mx-auto" elevation="8" max-width="800">
<v-slide-group
v-model="model"
class="pa-4"
prev-icon="mdi-minus"
next-icon="mdi-plus"
show-arrows
>
<v-slide-item v-for="n in 15" :key="n" v-slot:default="{ active, toggle }">
<v-card
:color="active ? 'primary' : 'grey lighten-1'"
class="ma-4"
height="200"
width="100"
@click="toggle"
>
<v-row class="fill-height" align="center" justify="center">
<v-scale-transition>
<v-icon
v-if="active"
color="white"
size="48"
v-text="'mdi-close-circle-outline'"
></v-icon>
</v-scale-transition>
</v-row>
</v-card>
</v-slide-item>
</v-slide-group>
</v-sheet>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
model: undefined,
}),
};
</script>
to add the v-slide-group component with the v-slide-item components inside for the items.
We use the active boolean to check if the item is selected.
And the toggle function lets us toggle the active state.
Conclusion
We can group items with list item groups and slide item groups.